package org.ipb.controller.modul.agendapimpinan;

import java.util.Calendar;
import java.util.List;
import java.util.Locale;

import org.ipb.controller.modul.PageController;
import org.ipb.model.AgendaPimpinan;
import org.ipb.model.JabatanStrukturalPegawai;

import util.hibernate.DAO;

import com.opensymphony.xwork2.ActionSupport;

public class ActionPage extends ActionSupport {
	// private List<AgendaJabatanStruktural> listAllAgendaJabatanStruktural;
	private int tahun;
	private int bulan;
	private String indexbulan;
	private String indextanggal;
	private Integer bulanSebelum;
	private String namaBulanSebelum;
	private Integer bulanSesudah;
	private String namaBulanSesudah;
	private String namaBulan;
	private int jumlahHari;
	private int hariPertama;
	private int tanggal;
	private int jumlahMinggu;
	private int jumlahSlotTanggal;
	private final String strBulan[] = { "Januari", "Februari", "Maret",
			"April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober",
			"November", "Desember" };
	private List<JabatanStrukturalPegawai> listPejabat;
	private List<JabatanStrukturalPegawai> listPejabatLain;
	private String kelompokStrukturId;
	private static final long serialVersionUID = 1L;
	PageController pageControl = new PageController();

	public String execute() {
		pageControl.setNavText("AgendaJabatanStruktural");
		pageControl.setAll(false);
		return SUCCESS;
	}

	public String daftaragenda() {
		return SUCCESS;
	}

	public String undanganpimpinan() {
		return SUCCESS;
	}
	public String add() {
		return SUCCESS;
	}

	@SuppressWarnings("unchecked")
	public String daftarpejabat() {
		DAO<Integer> dao = new DAO<Integer>();
		dao.createQuery("from JabatanStrukturalPegawai as jsp where id in (select max(id) from "
				+ "JabatanStrukturalPegawai group by strukturOrganisasi.id) and jsp.strukturOrganisasi.kelompokOrganisasi.inisial='PIM' order by jsp.strukturOrganisasi.urutan asc");

		listPejabat = (List<JabatanStrukturalPegawai>) dao.resultQuery();
		dao.close();
		return SUCCESS;

	}

	@SuppressWarnings("unchecked")
	public String daftarpejabatlain() {
		DAO<Integer> dao = new DAO<Integer>();
		dao.createQuery("from JabatanStrukturalPegawai as jsp where id in (select max(id) from "
				+ "JabatanStrukturalPegawai group by strukturOrganisasi.id) and jsp.strukturOrganisasi.kelompokStruktur.inisial <> 'PIM' "
				+ " and jsp.strukturOrganisasi.kelompokStruktur.id = :kelompokStrukturId  order by jsp.strukturOrganisasi.urutan asc");
		dao.queryParamter("kelompokStrukturId", Integer.valueOf(getKelompokStrukturId()));
		listPejabatLain = (List<JabatanStrukturalPegawai>) dao.resultQuery();
		dao.close();
		return SUCCESS;

	}

	public String kalendar() {

		if (bulanSebelum != null && bulanSesudah == null) {
			return bulansebelum();
		}
		if (bulanSebelum == null && bulanSesudah != null) {
			return bulansesudah();
		}
		return bulanini();
	}

	public PageController getPageControl() {
		return pageControl;
	}

	public void setPageControl(PageController pageControl) {
		this.pageControl = pageControl;
	}

	public String view() {
		Calendar kalendar = Calendar.getInstance(new Locale("id"));
		return setCalendar(kalendar);
	}

	public String bulanini() {
		Calendar kalendar = Calendar.getInstance(new Locale("id"));
		return setCalendar(kalendar);
	}

	public String bulansebelum() {
		Calendar kalendar = Calendar.getInstance(new Locale("id"));
		kalendar.set(getTahun(), getBulanSebelum(), 1);
		// System.out.println(kalendar.get(Calendar.YEAR) + " " + getTahun() +
		// " " + getBulanSesudah());
		return setCalendar(kalendar);
	}

	public String bulansesudah() {
		Calendar kalendar = Calendar.getInstance(new Locale("id"));
		kalendar.set(getTahun(), getBulanSesudah(), 1);
		return setCalendar(kalendar);
	}

	private String setCalendar(Calendar kalendar) {
		DAO<Integer> dao = new DAO<Integer>();
		dao.createCriteria(AgendaPimpinan.class);
		tahun = kalendar.get(Calendar.YEAR);
		namaBulan = strBulan[kalendar.get(Calendar.MONTH)];
		bulanSebelum = kalendar.get(Calendar.MONTH) - 1;
		bulanSesudah = kalendar.get(Calendar.MONTH) + 1;
		if (bulanSebelum > -1)
			namaBulanSebelum = strBulan[kalendar.get(Calendar.MONTH) - 1];
		else
			namaBulanSebelum = "";

		if (bulanSesudah < 12)
			namaBulanSesudah = strBulan[kalendar.get(Calendar.MONTH) + 1];
		else
			namaBulanSesudah = "";

		bulan = kalendar.get(Calendar.MONTH);
		if ((bulan + 1) < 10)
			indexbulan = "0" + (bulan + 1);
		else
			indexbulan = "" + (bulan + 1);

		tanggal = kalendar.get(Calendar.DATE);
		if ((tanggal + 1) < 10)
			indextanggal = "0" + (tanggal + 1);
		else
			indextanggal = "" + (tanggal + 1);

		jumlahHari = kalendar.getActualMaximum(Calendar.DAY_OF_MONTH);
		jumlahMinggu = kalendar.getActualMaximum(Calendar.WEEK_OF_MONTH);
		hariPertama = this.getFisrtDayOfWeek(getTahun(), getBulan());
		jumlahSlotTanggal = jumlahMinggu * 7;
		// listAllAgendaJabatanStruktural = (List<AgendaJabatanStruktural>)
		// dao.find();
		return SUCCESS;
	}

	public String[] getStrBulan() {
		return strBulan;
	}

	private int getFisrtDayOfWeek(int t, int b) {
		Calendar kal = Calendar.getInstance(new Locale("id"));
		kal.set(t, b, 1);
		return kal.get(Calendar.DAY_OF_WEEK);
	}

	public String getNamaBulan() {
		return namaBulan;
	}

	public void setNamaBulan(String namaBulan) {
		this.namaBulan = namaBulan;
	}

	public int getJumlahHari() {
		return jumlahHari;
	}

	public void setJumlahHari(int jumlahHari) {
		this.jumlahHari = jumlahHari;
	}

	public int getHariPertama() {
		return hariPertama;
	}

	public void setHariPertama(int hariPertama) {
		this.hariPertama = hariPertama;
	}

	public int getTanggal() {
		return tanggal;
	}

	public void setTanggal(int tanggal) {
		this.tanggal = tanggal;
	}

	public int getBulan() {
		return bulan;
	}

	public void setBulan(int bulan) {
		this.bulan = bulan;
	}

	public int getBulanSebelum() {
		return bulanSebelum;
	}

	public void setBulanSebelum(int bulanSebelum) {
		this.bulanSebelum = bulanSebelum;
	}

	public int getBulanSesudah() {
		return bulanSesudah;
	}

	public void setBulanSesudah(int bulanSesudah) {
		this.bulanSesudah = bulanSesudah;
	}

	public int getTahun() {
		return tahun;
	}

	public void setTahun(int tahun) {
		this.tahun = tahun;
	}

	public int getJumlahMinggu() {
		return jumlahMinggu;
	}

	public void setJumlahMinggu(int jumlahMinggu) {
		this.jumlahMinggu = jumlahMinggu;
	}

	public int getJumlahSlotTanggal() {
		return jumlahSlotTanggal;
	}

	public void setJumlahSlotTanggal(int jumlahSlotTanggal) {
		this.jumlahSlotTanggal = jumlahSlotTanggal;
	}

	public String getNamaBulanSebelum() {
		return namaBulanSebelum;
	}

	public void setNamaBulanSebelum(String namaBulanSebelum) {
		this.namaBulanSebelum = namaBulanSebelum;
	}

	public String getNamaBulanSesudah() {
		return namaBulanSesudah;
	}

	public void setNamaBulanSesudah(String namaBulanSesudah) {
		this.namaBulanSesudah = namaBulanSesudah;
	}

	public String getIndexbulan() {
		return indexbulan;
	}

	public void setIndexbulan(String indexbulan) {
		this.indexbulan = indexbulan;
	}

	public String getIndextanggal() {
		return indextanggal;
	}

	public void setIndextanggal(String indextanggal) {
		this.indextanggal = indextanggal;
	}

	public List<JabatanStrukturalPegawai> getListPejabat() {
		return listPejabat;
	}

	public void setListPejabat(List<JabatanStrukturalPegawai> listPejabat) {
		this.listPejabat = listPejabat;
	}

	public List<JabatanStrukturalPegawai> getListPejabatLain() {
		return listPejabatLain;
	}

	public void setListPejabatLain(List<JabatanStrukturalPegawai> listPejabatLain) {
		this.listPejabatLain = listPejabatLain;
	}

	public String getKelompokStrukturId() {
		return kelompokStrukturId;
	}

	public void setKelompokStrukturId(String kelompokStrukturId) {
		this.kelompokStrukturId = kelompokStrukturId;
	}
}
